#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;

struct node{
	int h,m,s;
	bool operator<(const node& p) const 
	{
		if(h==p.h)
		{
			if(m==p.m)
			{
				return s<p.s;
			}
			return m<p.m;
		}
		return h<p.h;
	}
	bool operator>(const node& p) const 
	{
		if(h==p.h)
		{
			if(m==p.m)
			{
				return s>p.s;
			}
			return m>p.m;
		}
		return h>p.h;		
	}
	bool operator==(const node& p) const 
	{
		return h==p.h && m==p.m && s==p.s;
	}
};
struct span{
	node start;
	node en;
	bool operator<(const span& p) const 
	{

		return en<p.en;
		
	}
};
int main()
{
    int n;
    cin>>n;
    vector<span> ret;
    
    for(int i=0;i<n;i++)
    {
		node t1,t2;
		scanf("%d:%d:%d %d:%d:%d",&t1.h,&t1.m,&t1.s,&t2.h,&t2.m,&t2.s);
		span kkk;
		kkk.start=t1;
		kkk.en=t2;
		ret.push_back(kkk);
	}
	sort(ret.begin(),ret.end());
	node right=ret[0].en;
	
	int cnt=1;
	vector<node> q;
	
	q.push_back(right);
	
	for(int i=1;i<ret.size();i++)
	{
		int pos=-1;
		for(int j=0;j<q.size();j++)
		{
			if(q[j]<ret[i].start)
			{
				pos=j;
			}
		}
		
		if(pos==-1)
			q.push_back(ret[i].en);
		else
			q[pos]=ret[i].en;
			
	}
	cout<<q.size()<<endl;
	
    return 0;
}
